// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMqttClient> // Qt MQTT客户端库，用于实现MQTT协议通信
#include <datashow.h>

// Qt UI命名空间声明（自动生成）
QT_BEGIN_NAMESPACE
namespace Ui
{
    class MainWindow; // 前向声明UI类（实际定义在ui_mainwindow.h中）
}
QT_END_NAMESPACE

/*
 * 主窗口类，继承自QMainWindow
 * 实现MQTT客户端的基本功能（连接/断开、发布/订阅）
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT // 启用Qt元对象系统（信号槽机制）

public:
    explicit MainWindow(QWidget *parent = nullptr); // 带父对象指针的显式构造函数
    ~MainWindow(); // 析构函数

signals:
    void messageReceived(const QString &message, const QString &topic); // 自定义数据传输信号

public slots:
    void setClientPort(int p); // 设置客户端端口号（参数p为端口号）

private slots:

    // UI按钮事件处理槽函数
    void main_buttonConnect_clicked(); // 连接/断开按钮点击
    void main_buttonQuit_clicked(); // 退出按钮点击
    void main_buttonPublish_clicked(); // 发布消息按钮点击
    void main_buttonSubscribe_clicked(); // 订阅主题按钮点击

    // 状态更新槽函数
    void updateLogStateChange();  // 更新连接状态日志显示
    void brokerDisconnected(); // 处理与代理断开连接的后续操作

    void on_Monitoring_Panel_Button_clicked(); // 温湿度监测按钮事件处理槽函数
    void LoggingButton_clicked(); // 错误日志按钮事件处理槽函数

private:
    Ui::MainWindow *ui; // 指向UI界面元素的指针（由Qt自动生成）
    QMqttClient *m_client; // MQTT客户端实例指针，用于所有MQTT通信操作

    int mainwindow_logRefreshCount = 0;      // 日志刷新次数计数器
    const int MainWindow_MAX_REFRESH_COUNT = 30; // 最大刷新次数（超出则清理）
};

#endif // MAINWINDOW_H
